package rauguelu.feria.tapas;


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

import rauguelu.feria.utils.Constants;
import rauguelu.items.Comentario;
import rauguelu.programaEventos.R;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.Settings.Secure;
import android.text.SpannableString;
import android.text.style.UnderlineSpan;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.TextView;
import android.widget.Toast;

public class TapaDetalle extends Activity {

	  BaseDatosFeriasHelper miBBDDHelper;
	  Long mRowId;
	  TextView votaButton;
	  String votos;
	  TextView quitaVotoButton;
	  Comentario[] aComentarios=null;
	  String votada;
	  Dialog ventanaVotar;
	  Dialog ventanaComentarios;
	  String voto3p;
	  String voto2p;
	  String voto1p;
	  String idBar;
	  boolean conexion = true;
	  Cursor tapa;
	  RatingBar votoActual;
	  EditText nombreComentario;
	  EditText textoComentario;
	  
	  String rutaImagen;
	  String nombreTapa;
	  Dialog zoomFoto;
	 
	  Typeface font;
	  Typeface font2;
	  boolean puedeVotar;
	  String votosAbiertos;
		
		
	    // Para el dialogo de progreso es necesaria una variable global porque iniciamos el 
		// dialogo en una funcion y lo ocultamos en otra
		private ProgressDialog progressDialog;
		
		/**
		 * Android nos presenta la restricciones que no podemos alterar los elementos de interfaz 
		 * grafica en un hilo de ejecucion que no sea el principal por lo que es necesario utilizar 
		 * un manejador(Handler) para enviar un mensaje de un hilo a otro cuando la carga de datos
		 * haya terminado.
		 */		
	    private final Handler progressHandler = new Handler() {
			public void handleMessage(Message msg) {
				progressDialog.dismiss();
				actualizaVotos();
	        }
	    };
	    
	    private final Handler progressHandlerComentarios = new Handler() {
			public void handleMessage(Message msg) {
				progressDialog.dismiss();
				actualizaVotosComentarios();
	        }
	    };
	    
	    private final Handler progressHandlerSinConexion = new Handler() {
 			public void handleMessage(Message msg) {
 				progressDialog.dismiss();
 				Context context = getApplicationContext();
 				CharSequence text = "Imposible conectar con el servidor. No se podrán votar las tapas";
 				int duration = 1;
 				conexion=false;
 				Toast toast = Toast.makeText(context, text, duration);
 				votaButton.setVisibility(View.GONE);
 				quitaVotoButton.setVisibility(View.GONE);
 				toast.show();
 	        }
 	    };
 	    
 	   private final Handler  progressHandlerVentanaComentarios = new Handler() {
 			public void handleMessage(Message msg) {
 				progressDialog.dismiss();
 				
 				ListView lvComentarios =(ListView) ventanaComentarios.findViewById(R.id.lv_comentarios);
 				lvComentarios.setAdapter(new ComentarioAdapter(TapaDetalle.this, R.layout.comentario_row, aComentarios));
 				
 				ventanaComentarios.show();
 	        }
 	    };
 	    
 	   private final Handler  progressHandlerAltaComentario = new Handler() {
			public void handleMessage(Message msg) {
				progressDialog.dismiss();
				
				ListView lvComentarios =(ListView) ventanaComentarios.findViewById(R.id.lv_comentarios);
				lvComentarios.setAdapter(new ComentarioAdapter(TapaDetalle.this, R.layout.comentario_row, aComentarios));
				nombreComentario.setText("");
				textoComentario.setText("");
				CharSequence text = "Comentario registrado correctamente";
 				int duration = 2;
 				Toast toast = Toast.makeText(getApplicationContext(), text, duration);
 				votaButton.setVisibility(View.GONE);
 				quitaVotoButton.setVisibility(View.GONE);
	        }
	    };
 	    
 	   
	    
	  public void actualizaVotosComentarios()
	  {
		  
		  //setListAdapter(new ComentarioAdapter(this, R.layout.comentario_row, comentarios));
		  if(!"N".equals(votada))
		  {
				votoActual.setVisibility(View.VISIBLE);
				//votoActual.setStepSize((float) 1.0);
				votoActual.setNumStars(Integer.parseInt(votada));
				votoActual.setRating(Integer.parseInt(votada));

			   
				quitaVotoButton.setVisibility(View.VISIBLE);
				votaButton.setVisibility(View.GONE);
				quitaVotoButton.setOnClickListener(new QuitaVotoOnClickListener());
		  }
		  else
		  {
			  votoActual.setVisibility(View.INVISIBLE);
			  quitaVotoButton.setVisibility(View.GONE);
			  if(puedeVotar)
			  {
				  votaButton.setVisibility(View.VISIBLE);
				  votaButton.setOnClickListener(new AbreDialogOnClickListener());
				  votaButton.setBackgroundColor(0xFFFE2E64);
				  votaButton.setClickable(true);
			  }
			  else
			  {
				  votaButton.setOnClickListener(null);
				  votaButton.setBackgroundColor(Color.GRAY);
				  votaButton.setClickable(false);
				  
					CharSequence text = "Ya has gastado todos tus votos. Si quieres votar por esta tapa tienes que quitárselo a otra... ¿Díficil eh?";
	 				int duration = 5;
	 				conexion=false;
	 				Toast toast = Toast.makeText(TapaDetalle.this, text, duration);
	 				toast.show();
			  }
		  }
	  }
	  @Override
	  public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);

	        setContentView(R.layout.tapa_detalle);
	        font = Typeface.createFromAsset(getAssets(), "VSVBPSB.TTF");
		  	font2 = Typeface.createFromAsset(getAssets(), "VSVAB.TTF");
		  	votoActual = (RatingBar) findViewById(R.id.voto_actual);  
	        
	      TextView titulo = (TextView) findViewById(R.id.titulo);
	       titulo.setTypeface(font);
	      
	     
	  	  
	        //Button confirmButton = (Button) findViewById(R.id.confirm);
	        //Obtenemos la tapa de la base de datos del telefono
	        mRowId = (savedInstanceState == null) ? null : (Long) savedInstanceState.getSerializable("_id");
	        if (mRowId == null) {
	            Bundle extras = getIntent().getExtras();
	            mRowId = extras != null ? extras.getLong("_id")
	                                    : null;
	        }
	        crearBBDDTapas();
	        populateFields();
	        puedeVotar = puedeVotar();
	     // Lanzamos un evento de ProgressDialog para hacer esperar al usuario
	    	progressDialog = ProgressDialog.show(TapaDetalle.this,
	    			"", 
					"Cargando Votaciones...");
	    	// Lanzamos la hebra para que el ProgressDialog sea visible
			new Thread(new Runnable(){
				public void run() {
			        //obtenemos el numero de votos registrados desde el servidor
			    	HttpClient httpclient = new DefaultHttpClient();     
			    	HttpGet httpget = new HttpGet(Constants.urlServidor + "votosSync.php?id="+mRowId+"&deviceId=" + Secure.getString(getContentResolver(), Secure.ANDROID_ID));      
			    	ResponseHandler<String> responseHandler = new BasicResponseHandler();
			     
		    		String responseBody = null;
			    		
					
		    		try{
		    			responseBody = httpclient.execute(httpget, responseHandler);
		    			JSONObject jsonObject = null;
			    		JSONArray jsonArray = null;
			    		JSONParser parser=new JSONParser();
						
						try {
							Object obj = parser.parse(responseBody);
							jsonObject=(JSONObject)obj;
							
						}catch(Exception ex){
							Log.v("TEST","Exception: " + ex.getMessage());
							throw ex;
						}
						jsonArray =(JSONArray) jsonObject.get("votos");
						votos = ((JSONObject)jsonArray.get(0)).get("numero_votos").toString();
						jsonArray =(JSONArray) jsonObject.get("votosDispositivo");
						if(jsonArray.size()>0)
						{
							if( ((JSONObject)jsonArray.get(0)).get("id_tapa_3")!=null)
							{
								voto3p = ((JSONObject)jsonArray.get(0)).get("id_tapa_3").toString();
							}
							if( ((JSONObject)jsonArray.get(0)).get("id_tapa_2")!=null)
							{
								voto2p = ((JSONObject)jsonArray.get(0)).get("id_tapa_2").toString();
							}
							if( ((JSONObject)jsonArray.get(0)).get("id_tapa_1")!=null)
							{
								voto1p = ((JSONObject)jsonArray.get(0)).get("id_tapa_1").toString();
							}
						}
						jsonArray =(JSONArray) jsonObject.get("votosAbiertos");
						JSONObject votosAbiertosObject = (JSONObject)jsonArray.get(0);
						votosAbiertos = (String)votosAbiertosObject.get("value").toString();
						
						
						progressHandlerComentarios.sendEmptyMessage(0);
		    		}catch(Exception ex) {
		    			ex.printStackTrace();
		    			progressHandlerSinConexion.sendEmptyMessage(0);
		    		}
			    	
		    		
				}
				}).start();
			votaButton = (TextView) findViewById(R.id.vota);
			quitaVotoButton = (TextView) findViewById(R.id.quita_voto);
			TextView comparte = (TextView) findViewById(R.id.compartir);
			TextView comentarios = (TextView) findViewById(R.id.comentarios);
			votaButton.setTypeface(font);
			quitaVotoButton.setTypeface(font);
			comparte.setTypeface(font);
			comentarios.setTypeface(font);
			quitaVotoButton.setTypeface(font);
				
			if("N".equals(votada) && !puedeVotar)
			{
				 
				 votaButton.setBackgroundColor(Color.GRAY);
				 votaButton.setClickable(false);
				 votaButton.setOnClickListener(null);
				 /*TextView textoAviso = (TextView) findViewById(R.id.texto_aviso);
				 textoAviso.setVisibility(View.VISIBLE);*/
				 
			}
			else
			{
				if(!"N".equals(votada))
				{
					
				
//					votoActual.setStepSize(1);
					votoActual.setNumStars(Integer.parseInt(votada));
					votoActual.setRating(Integer.parseInt(votada));
					votoActual.setVisibility(View.VISIBLE);
					votoActual.setProgress(3);
				   
					quitaVotoButton.setVisibility(View.VISIBLE);
					votaButton.setVisibility(View.GONE);
					quitaVotoButton.setOnClickListener(new QuitaVotoOnClickListener());
				}
				else
				{
			         votaButton.setOnClickListener(new AbreDialogOnClickListener());
				}
			}
			
			comparte.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					Intent share = new Intent(Intent.ACTION_SEND);
	        		 share.setType("image/jpeg"); // might be text, sound, whatever
	        		 FileOutputStream output;
	        		 File imagenTapa=null;
					try {
						output = openFileOutput("tapa.jpeg",MODE_WORLD_READABLE );
					
		        		 InputStream inputPrueba = getResources().openRawResource(TapaDetalle.this.getResources().getIdentifier(rutaImagen,
		            				"drawable", TapaDetalle.this.getPackageName()));
		        		 byte[] buffer = new byte[128];
		        		 while ( ( inputPrueba.read(buffer) ) != -1  )
		        		 {
		        			 output.write(buffer);
		        			 output.flush();
		        		 }
		        	 
		        	 
		        		 imagenTapa = getFileStreamPath("tapa.jpeg");
					} catch (FileNotFoundException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
	        		 share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imagenTapa));
	        		 share.putExtra(Intent.EXTRA_TEXT, "Pedazo de "+ nombreTapa +" que he probado en el festival de los sentidos");
	        		 
	        		 startActivity(Intent.createChooser(share, "share"));
					
				}
			});
			
			comentarios.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					 ventanaComentarios = new Dialog (TapaDetalle.this);
					 ventanaComentarios.requestWindowFeature(Window.FEATURE_NO_TITLE);
					 ventanaComentarios.setCancelable(true);
					 ventanaComentarios.setContentView(R.layout.ventana_comentarios);
					 
					 TextView salir_comentarios = (TextView) ventanaComentarios.findViewById(R.id.salir_comentarios);
					 TextView aceptar_comentario = (TextView) ventanaComentarios.findViewById(R.id.aceptar_comentario);
					 
					 aceptar_comentario.setTypeface(font);
					 salir_comentarios.setTypeface(font);
					 
					 progressDialog = ProgressDialog.show(TapaDetalle.this,
				    			"", 
								"Cargando Comentarios...");
				    	// Lanzamos la hebra para que el ProgressDialog sea visible
						new Thread(new Runnable(){
							public void run() {
						        //obtenemos el numero de votos registrados desde el servidor
						    	HttpClient httpclient = new DefaultHttpClient();     
						    	HttpGet httpget = new HttpGet(Constants.urlServidor + "comentarios.php?id="+mRowId+"&pagina=1&deviceId=" + Secure.getString(getContentResolver(), Secure.ANDROID_ID));      
						    	ResponseHandler<String> responseHandler = new BasicResponseHandler();
						     
					    		String responseBody = null;
						    		
								
					    		try{
					    			responseBody = httpclient.execute(httpget, responseHandler);
					    			JSONObject jsonObject = null;
						    		JSONArray jsonArray = null;
						    		JSONParser parser=new JSONParser();
									
									try {
										Object obj = parser.parse(responseBody);
										jsonObject=(JSONObject)obj;
										
									}catch(Exception ex){
										Log.v("TEST","Exception: " + ex.getMessage());
										throw ex;
									}
									jsonArray =(JSONArray) jsonObject.get("comentarios");
									aComentarios= new Comentario[jsonArray.size()];
									Comentario comentario = null;
									try {
										for(int i=0;i<jsonArray.size();i++)
										{
											comentario = new Comentario();
											comentario.setComentario(((JSONObject)jsonArray.get(i)).get("comentario").toString());
											comentario.setUsuario(((JSONObject)jsonArray.get(i)).get("nombre").toString());
											comentario.setDateTime(((JSONObject)jsonArray.get(i)).get("datetime").toString());
											aComentarios[i] = comentario;
										}
									}catch(Exception ex){
										Log.v("TEST","Exception: " + ex.getMessage());
										
									}
									progressHandlerVentanaComentarios.sendEmptyMessage(0);
					    		}catch(Exception ex) {
					    			ex.printStackTrace();
					    			progressHandlerSinConexion.sendEmptyMessage(0);
					    		}
						    	
					    		
							}
							}).start();
					 
					 
					 TextView aceptar = (TextView) ventanaComentarios.findViewById(R.id.aceptar_comentario);
					 TextView salir = (TextView) ventanaComentarios.findViewById(R.id.salir_comentarios);
					 
					 salir.setOnClickListener(new OnClickListener() {
							
							@Override
							public void onClick(View v) {
								ventanaComentarios.cancel();
							}	
					});
					 
					 aceptar.setOnClickListener(new OnClickListener() {
						
						@Override
						public void onClick(View v) {
							nombreComentario = (EditText)ventanaComentarios.findViewById(R.id.nombre_comentario);
							textoComentario = (EditText)ventanaComentarios.findViewById(R.id.texto_comentario);
							if(textoComentario.getText().toString().equals(""))
							{
								CharSequence text = "Debes introducir algun comentario";
				 				int duration = 2;
				 				Toast toast = Toast.makeText(TapaDetalle.this, text, duration);
				 				toast.show();
							}
							else
							{
							 progressDialog = ProgressDialog.show(TapaDetalle.this,
						    			"", 
										"Enviando comentario...");
						    	// Lanzamos la hebra para que el ProgressDialog sea visible
									new Thread(new Runnable(){
										public void run() {
											nombreComentario = (EditText)ventanaComentarios.findViewById(R.id.nombre_comentario);
											textoComentario = (EditText)ventanaComentarios.findViewById(R.id.texto_comentario);
									        //obtenemos el numero de votos registrados desde el servidor
									    	HttpClient httpclient = new DefaultHttpClient();     
									    	HttpGet httpget = new HttpGet(Constants.urlServidor + "altaComentario.php?id="+mRowId+"&nombre=" + Uri.encode(nombreComentario.getText().toString())+"&comentario=" + Uri.encode(textoComentario.getText().toString()) +"&pagina=1&deviceId=" + Secure.getString(getContentResolver(), Secure.ANDROID_ID));      
									    	ResponseHandler<String> responseHandler = new BasicResponseHandler();
									     
								    		String responseBody = null;
									    		
											
								    		try{
								    			responseBody = httpclient.execute(httpget, responseHandler);
								    			JSONObject jsonObject = null;
									    		JSONArray jsonArray = null;
									    		JSONParser parser=new JSONParser();
												
												try {
													Object obj = parser.parse(responseBody);
													jsonObject=(JSONObject)obj;
													
												}catch(Exception ex){
													Log.v("TEST","Exception: " + ex.getMessage());
													throw ex;
												}
												jsonArray =(JSONArray) jsonObject.get("comentarios");
												aComentarios= new Comentario[jsonArray.size()];
												Comentario comentario = null;
												try {
													for(int i=0;i<jsonArray.size();i++)
													{
														comentario = new Comentario();
														comentario.setComentario(((JSONObject)jsonArray.get(i)).get("comentario").toString());
														comentario.setUsuario(((JSONObject)jsonArray.get(i)).get("nombre").toString());
														comentario.setDateTime(((JSONObject)jsonArray.get(i)).get("datetime").toString());
														aComentarios[i] = comentario;
													}
												}catch(Exception ex){
													Log.v("TEST","Exception: " + ex.getMessage());
													
												}
												progressHandlerAltaComentario.sendEmptyMessage(0);
								    		}catch(Exception ex) {
								    			ex.printStackTrace();
								    			progressHandlerSinConexion.sendEmptyMessage(0);
								    		}
									    	
								    		
										}
										}).start();
							}
						}
					});
					 
					 
				}
			});
	}
	  
	  private boolean puedeVotar()
	  {
		  miBBDDHelper.abrirBaseDatosFerias();
		  long numeroVotos = miBBDDHelper.getNumeroVotos();
		  if(numeroVotos>=Constants.MAX_VOTOS)
		  {
			  return false;
		  }
		  return true;
			  
	  }
	  private void actualizaVotos()
	  {
		  String votos="";
		  HttpClient httpclient = new DefaultHttpClient();     
	      HttpGet	httpget = new HttpGet(Constants.urlServidor + "votos.php?id="+mRowId);      
	      ResponseHandler<String> responseHandler = new BasicResponseHandler();
	     
	  		String responseBody = null;
	  		try{
	  			responseBody = httpclient.execute(httpget, responseHandler);
	  		}catch(Exception ex) {
	  			ex.printStackTrace();
	  		}
		    		 
	  		JSONArray jsonArray = null;
			JSONParser parser=new JSONParser();
			
			try {
				Object obj = parser.parse(responseBody);
				jsonArray=(JSONArray)obj;
				
			}catch(Exception ex){
				Log.v("TEST","Exception: " + ex.getMessage());
			}
			
			
			try {
				votos = ((JSONObject)jsonArray.get(0)).get("numero_votos").toString();
			}catch(Exception ex){
				Log.v("TEST","Exception: " + ex.getMessage());
			}	
			
		  
			  if(!"N".equals(votada))
			  {
					votoActual.setVisibility(View.VISIBLE);
//					votoActual.setStepSize(1);
					votoActual.setNumStars(Integer.parseInt(votada));
					votoActual.setRating(Integer.parseInt(votada));
				   
					quitaVotoButton.setVisibility(View.VISIBLE);
					votaButton.setVisibility(View.GONE);
					quitaVotoButton.setOnClickListener(new QuitaVotoOnClickListener());
			  }
			  else
			  {
				  votoActual.setVisibility(View.INVISIBLE);
				  quitaVotoButton.setVisibility(View.GONE);
				  votaButton.setVisibility(View.VISIBLE);
				  votaButton.setBackgroundColor(0xFFFE2E64);
				  votaButton.setClickable(true);
				  votaButton.setOnClickListener(new AbreDialogOnClickListener());
			  }
	  }
	  @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //saveState();
        outState.putSerializable("_id", mRowId);
    }
	    
	  private void populateFields() {
	        if (mRowId != null) {
	        	miBBDDHelper.abrirBaseDatosFerias();
	            tapa = miBBDDHelper.fetchTapa(mRowId);
	            startManagingCursor(tapa);
	             
	            TextView nombreText = (TextView) findViewById(R.id.detalle_tapa);
	        //    TextView descripcionText = (TextView) findViewById(R.id.detalle_descripcion);
	         //   TextView barText = (TextView) findViewById(R.id.bar_detalle_tapa);
	            ImageView barText = (ImageView) findViewById(R.id.imagen_bar_detalle_tapa);
	            
	           
	            
	            ImageView icon = (ImageView) findViewById(R.id.detalle_imagen);
	            TextView ampliar = (TextView) findViewById(R.id.textView1);
	            
	            
//	            descripcionText.setTypeface(font2);
	            nombreTapa = tapa.getString(
	            		tapa.getColumnIndexOrThrow("NOMBRE"));
	            nombreText.setText(nombreTapa);
	            nombreText.setTypeface(font2);
//	            descripcionText.setText(tapa.getString(
//	            		tapa.getColumnIndexOrThrow("DESCRIPCION")));
	            
	            SpannableString content = new SpannableString(tapa.getString(
	            		tapa.getColumnIndexOrThrow("NOMBRE_BAR")));
	            content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
	            
	            
	            //barText.setText(content);
	            rutaImagen = tapa.getString(tapa.getColumnIndexOrThrow("RUTA_IMAGEN"));
	            icon.setImageResource(
	            		this.getResources().getIdentifier(rutaImagen,
	            				"drawable", this.getPackageName()));
	            
	            votada = tapa.getString(
	            		tapa.getColumnIndexOrThrow("FLAG_VOTADA"));
	          
	            ImageView imagenBar = (ImageView) findViewById(R.id.imagen_bar_detalle_tapa);
	            imagenBar.setImageResource(this.getResources().getIdentifier( tapa.getString(tapa.getColumnIndexOrThrow("RUTA_LOGO")),
	            				"drawable", this.getPackageName()));
	            
	           idBar = tapa.getString(
	            		tapa.getColumnIndexOrThrow("_id"));
	           barText.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View paramView) {
					  Intent i = new Intent(getApplicationContext(), BarDetalle.class);
				      i.putExtra("_id",idBar);
				      startActivityForResult(i, 1);
				}
			});
	           
	           ampliar.setOnClickListener(new OnClickListener() {
					
					@Override
					public void onClick(View v) {
						 zoomFoto = new Dialog (TapaDetalle.this);
						 zoomFoto.requestWindowFeature(Window.FEATURE_NO_TITLE);
						 zoomFoto.setCancelable(true);
						 zoomFoto.setContentView(R.layout.zoom_foto);
						 
						 ImageView zoom = (ImageView)zoomFoto.findViewById(R.id.zoom);
						 zoom.setImageResource(
								 TapaDetalle.this.getResources().getIdentifier(rutaImagen,
				            				"drawable",  TapaDetalle.this.getPackageName()));
						 
						 zoom.setOnClickListener(new OnClickListener() {
							
							@Override
							public void onClick(View v) {
								zoomFoto.dismiss();
								
							}
						});
						 
						 
						 ImageView cerrar = (ImageView)zoomFoto.findViewById(R.id.cerrar);
						 cerrar.setOnClickListener(new OnClickListener() {
								
								@Override
								public void onClick(View v) {
									zoomFoto.dismiss();
									
								}
							});
						 zoomFoto.show();
					}
				});
	           
	           icon.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					 zoomFoto = new Dialog (TapaDetalle.this);
					 zoomFoto.requestWindowFeature(Window.FEATURE_NO_TITLE);
					 zoomFoto.setCancelable(true);
					 zoomFoto.setContentView(R.layout.zoom_foto);
					 
					 ImageView zoom = (ImageView)zoomFoto.findViewById(R.id.zoom);
					 zoom.setImageResource(
							 TapaDetalle.this.getResources().getIdentifier(rutaImagen,
			            				"drawable",  TapaDetalle.this.getPackageName()));
					 
					 zoom.setOnClickListener(new OnClickListener() {
						
						@Override
						public void onClick(View v) {
							zoomFoto.dismiss();
							
						}
					});
					 
					 
					 ImageView cerrar = (ImageView)zoomFoto.findViewById(R.id.cerrar);
					 cerrar.setOnClickListener(new OnClickListener() {
							
							@Override
							public void onClick(View v) {
								zoomFoto.dismiss();
								
							}
						});
					 zoomFoto.show();
				}
			});
	        }
	    }
	  
	  public void crearBBDDTapas() {
			miBBDDHelper = new BaseDatosFeriasHelper(this);
			try {
				miBBDDHelper.crearDataBaseFerias();
			} catch (IOException ioe) {
				throw new Error("Unable to create database");
			}
		}
	  
	  private void marcaVotada(Long id,int numeroVotos)
		 {
			 if (id != null) {
		        	miBBDDHelper.abrirBaseDatosFerias();
		            miBBDDHelper.marcaTapaVotada(id,numeroVotos);
		            miBBDDHelper.close();  
		        } 
		 }
	  
	  private void desmarcaVotada(Long id)
		 {
			 if (id != null) {
		        	miBBDDHelper.abrirBaseDatosFerias();
		            miBBDDHelper.desmarcaTapaVotada(id);
		            miBBDDHelper.close();
		        } 
		 }
	  
		private class ComentarioAdapter extends ArrayAdapter<Comentario> {

			private Comentario[] items;

			public ComentarioAdapter(Context context, int textViewResourceId,
					Comentario[] items) {
				super(context, textViewResourceId, items);
				this.items = items;
			}

			@Override
			public View getView(int position, View convertView, ViewGroup parent) {
				View v = convertView;
				if (v == null) {
					LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
					v = vi.inflate(R.layout.comentario_row, null);
					v.setClickable(false);
				}
				final String comentario = items[position].getComentario();
				if (comentario != null) {
					TextView comentarioDetalle = (TextView) v.findViewById(R.id.comentario_detalle);
					TextView usuario = (TextView) v.findViewById(R.id.usuario);
					
					if (comentarioDetalle != null) {
						comentarioDetalle.setText(comentario);
					}
					String sUsuario="";
					if(items[position].getUsuario()==null || "".equals(items[position].getUsuario()))
					{
						sUsuario = "Anonimo";
					}
					else
					{
						sUsuario = items[position].getUsuario();
					}
					
					String sDateTime = items[position].getDateTime();
					SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
					SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm dd/MM/yy");
					
					
					try {
						usuario.setText(sUsuario + " a las " + sdf2.format(sdf.parse(sDateTime)) + " dijo:");
					} catch (ParseException e) {
						e.printStackTrace();
					}
					
				}
				return v;
			}
			
		}
		
		public class AbreDialogOnClickListener implements OnClickListener
		{
		     
       	 public void onClick(View view) {
       		 ventanaVotar = new Dialog (TapaDetalle.this);
       		 ventanaVotar.requestWindowFeature(Window.FEATURE_NO_TITLE);
       		 ventanaVotar.setCancelable(true);
       		 ventanaVotar.setContentView(R.layout.votacion);
       		 TextView aviso = (TextView)ventanaVotar.findViewById(R.id.aviso);
       		 if(votosAbiertos.equals("N"))
       		 {
       			 aviso.setVisibility(View.VISIBLE);
       		 }
       		 
       		TextView titulo = (TextView) ventanaVotar.findViewById(R.id.titulo_puntuar);
       		titulo.setTypeface(font);
       		
       		 TextView tresPuntos = (TextView) ventanaVotar.findViewById(R.id.tres_puntos);
       		 tresPuntos.setTypeface(font);
       		 if(voto3p!=null || votosAbiertos.equals("N"))
       		 {
       			 tresPuntos.setBackgroundColor(Color.GRAY);
       			 tresPuntos.setClickable(false);
       		 }
       		 else
       		 {
       			 tresPuntos.setOnClickListener(new VotaOnClickListener());
       		 }
       		 
       		 
       		TextView dosPuntos = (TextView) ventanaVotar.findViewById(R.id.dos_puntos);
       		dosPuntos.setTypeface(font);
       		 if(voto2p!=null || votosAbiertos.equals("N"))
       		 {
       			 dosPuntos.setBackgroundColor(Color.GRAY);
       			 dosPuntos.setClickable(false);
       		 }
       		 else
       		 {
       			 dosPuntos.setOnClickListener(new VotaOnClickListener());
       		 }
       		 
       		TextView unPunto = (TextView) ventanaVotar.findViewById(R.id.un_punto);
       		unPunto.setTypeface(font);
       		 if(voto1p!=null || votosAbiertos.equals("N"))
       		 {
       			 unPunto.setBackgroundColor(Color.GRAY);
       			 unPunto.setClickable(false);
       		 }
       		 else
       		 {
       			 unPunto.setOnClickListener(new VotaOnClickListener());
       		 }
       		 
       		TextView cancelar = (TextView) ventanaVotar.findViewById(R.id.cancelar_votacion);
       		cancelar.setTypeface(font);
       		 cancelar.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View paramView) {
					ventanaVotar.dismiss();
				}
			});
       		 
       		 
       		 ventanaVotar.show();
       	 }

       }
		
		public class VotaOnClickListener implements OnClickListener{
			
			 int numeroVotos;
			//Metodo para votar 3 puntos de la tapa seleccionada.
			@Override
			public void onClick(View v) {
				ventanaVotar.dismiss();
				
				if(v.getId()==R.id.tres_puntos)
				{
					numeroVotos = 3;
				}
				else if(v.getId()==R.id.dos_puntos)
				{
					numeroVotos = 2;
				}
				else if (v.getId()==R.id.un_punto) 
				{
					numeroVotos = 1;
				}
				 // Lanzamos un evento de ProgressDialog para hacer esperar al usuario
    	    	progressDialog = ProgressDialog.show(TapaDetalle.this,
    	    			"", 
    					"Registrando el voto...");
     	     
    	    	
    	    	// Lanzamos la hebra para que el ProgressDialog sea visible
    			new Thread(new Runnable(){
    				public void run() {

    	        		HttpClient httpclient = new DefaultHttpClient();     
    	     	    	HttpGet httpget =null;      
    	     	    	ResponseHandler<String> responseHandler = new BasicResponseHandler();
    	     	    
    	     	    	httpget = new HttpGet(Constants.urlServidor + "vota.php?id="+mRowId + "&votos=" + numeroVotos + "&deviceId=" + Secure.getString(getContentResolver(), Secure.ANDROID_ID));
    	     	     
    	         		String responseBody = null;
    	         		try{
    	         			responseBody = httpclient.execute(httpget, responseHandler);
    	         			marcaVotada(mRowId,numeroVotos);
    	         			votada = "" + numeroVotos;
    	         			if(numeroVotos==3)
    	    				{
    	    					voto3p = "" +mRowId;
    	    				}
    	    				else if(numeroVotos==2)
    	    				{
    	    					voto2p ="" +mRowId;
    	    				}
    	    				else if (numeroVotos==1) 
    	    				{
    	    					voto1p = "" +mRowId;
    	    				}
    	         		}catch(Exception ex) {
    	         			Log.v("TEST","Exception: " + ex.getMessage());
    	         		} 
    	         		
    	    	    		
    	    			// Llamamos al progressHandler para que actualice el ListView
    					progressHandler.sendEmptyMessage(0);
    				}
    			}).start();
				
			}
		}
		
		public class QuitaVotoOnClickListener implements OnClickListener{
			
			@Override
			public void onClick(View v) {
				
				
				 // Lanzamos un evento de ProgressDialog para hacer esperar al usuario
    	    	progressDialog = ProgressDialog.show(TapaDetalle.this,
    	    			"", 
    					"Anulando voto...");
    	    	
    	    	// Lanzamos la hebra para que el ProgressDialog sea visible
    			new Thread(new Runnable(){
    				public void run() {

    	        		HttpClient httpclient = new DefaultHttpClient();     
    	     	    	HttpGet httpget =null;      
    	     	    	ResponseHandler<String> responseHandler = new BasicResponseHandler();
    	     	    
    	     	    	httpget = new HttpGet(Constants.urlServidor + "quitaVoto.php?id="+mRowId + "&deviceId=" + Secure.getString(getContentResolver(), Secure.ANDROID_ID));
    	     	     
    	         		String responseBody = null;
    	         		try{
    	         			responseBody = httpclient.execute(httpget, responseHandler);
    	         			desmarcaVotada(mRowId);
    	         			votada = "N";
    	         			if(("" +mRowId).equals(voto3p))
    	    				{
    	    					voto3p = null;
    	    				}
    	    				else if(("" +mRowId).equals(voto2p))
    	    				{
    	    					voto2p = null;
    	    				}
    	    				else if(("" +mRowId).equals(voto1p))
    	    				{
    	    					voto1p = null;
    	    				}
    	         			
    	         		}catch(Exception ex) {
    	         			Log.v("TEST","Exception: " + ex.getMessage());
    	         		} 
    	         		
    	    	    		
    	    			// Llamamos al progressHandler para que actualice el ListView
    					progressHandler.sendEmptyMessage(0);
    				}
    			}).start();
			}
		}
		
		
}
